import Obj from "./Obj";
import {returnType} from "../utils/Comparator";

/**
 * 该接口对实现它的每个类的对象的排序能力。其中{@link ComparableObj#compareTo}为其比较方法。
 *
 * 实现此接口的对象可以使某些类在不指定{@link Comparator}的情况下也能进行排序、比较等功能，如{@link PriorityQueue}、{@link Tree}等的类
 * 与{@link Lists#sort}等的方法。
 *
 * @param E 需要被比较的元素，通常是类自己
 * @see O
 * @version 1.0
 */
export abstract class ComparableObj<E> extends Obj {

  /**
   * 将此对象与指定的对象进行比较以进行排，并返回不同的值，表示此对象小于、等于或大于指定的对象。
   *
   * 有关返回值的详细信息，请参阅{@link returnType}。
   *
   * @param o 需要被判断的对象
   * @return {returnType} 此对象大于、等于或小于与指定的对象
   * @see returnType
   * @version 1.0
   */
  abstract compareTo(o: E): returnType;
}

export default ComparableObj;
